/*
左值    既可以放在等号左边，也可以放在等号右边的值。
右值    只能放在等号右边的值。

左值 
    val1 = val2
    val2 左值

右值
    常量
    表达式

在C++ 中 返回值的引用 是一个左值 可以被赋值的值

    int & func(aaaaa)；

    func() = 10;
C++ 中的 引用返回值 不能是 局部变量
        返回的引用变量 声明周期不能太短
    可以用的返回

    静态变量
    全局变量
    函数传参 传递的参数 需要是引用
*/


#include <iostream>
#include <string>

using namespace std;


// 使用静态的方式
int & Func_1()
{
    static int val = 10;
    return val;
} 

// 全局
int num;
int & Func_2()
{
    num = 80;
    return num;
} 

// 函数传参
int & Func_3(int & val)
{
    return val;
}

int main(int argc, char const *argv[])
{
    // 引用作为返回值 传递给引用 可以修改返回的值
    int & val = Func_2();
    val = 90;  
    cout << num << endl;    // 打印全局

    // 引用作为返回值  是左值 
    Func_2() = 123;
    cout << num << endl;        // 打印全局


    // 引用的返回值是 参数
    int arg = 10;
    Func_3(arg) = 50;
    cout << arg << endl;        // 打印传递的参数

    return 0;
}




